﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CREAPA.RepositorioADO
{
    public class DossieRepositorioADO
    {
        private Contexto contexto;

        private void Inserir(Dossie dossie)
        {
            var strQuery = "";
            strQuery += " INSERT INTO Dossie (TipoDocumento, PessoaInteressado, Descricao, DataDocumento, Caminho, PessoaCadastrou, DataCadastro)";
            strQuery += string.Format(" values ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}')", dossie.TipoDocumento, dossie.PessoaInteressado,
                dossie.Descricao, dossie.DataDocumento, dossie.Caminho, dossie.PessoaCadastrou, dossie.DataCadastro);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        //private void Alterar(Dossie dossie)
        //{
        //    var strQuery = "";
        //    strQuery += "UPDATE Permissoes SET ";
        //    strQuery += string.Format(" Descricao='{0}' ", permissao.Descricao);
        //    strQuery += string.Format(" WHERE Id={0} ", permissao.Id);
        //    using (contexto = new Contexto())
        //    {
        //        contexto.ExecutaComando(strQuery);
        //    }
        //}

        public void Salvar(Dossie dossie)
        {
            if (dossie.Id > 0)
            {
                //Alterar(dossie);
            }
            else
            {
                Inserir(dossie);
            }
        }

        public void Excluir(int id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = string.Format(" DELETE FROM Dossie WHERE Id = {0}", id);
                contexto.ExecutaComando(strQuery);
            }
        }

        public IEnumerable<Dossie> ListarDossie(string login)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("select d.Id, t.Nome TipoDocumento, d.PessoaInteressado, d.Descricao, convert(varchar(10),d.DataDocumento,103)DataDocumento, d.Caminho," +
    " d.PessoaCadastrou, d.DataCadastro from Dossie d inner join TipoDocDossie t on d.TipoDocumento=t.Id where d.PessoaInteressado='{0}'", login);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        public Dossie ListarPorId(int Id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT * FROM Dossie WHERE Id = {0}", Id);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }

        public Dossie NomeTipoDoc(string tipoDoc)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("SELECT Nome TipoDocumento from TipoDocDossie where Id ='{0}'", tipoDoc);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto2(retornoDataReader).FirstOrDefault();
            }
        }

        private List<Dossie> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var listaDossie = new List<Dossie>();
            while (reader.Read())
            {
                var TemObjeto = new Dossie()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    TipoDocumento = reader["TipoDocumento"].ToString(),
                    PessoaInteressado = reader["PessoaInteressado"].ToString(),
                    Descricao = reader["Descricao"].ToString(),
                    DataDocumento = DateTime.Parse(reader["DataDocumento"].ToString()),
                    Caminho = reader["Caminho"].ToString(),
                    PessoaCadastrou = reader["PessoaCadastrou"].ToString(),
                    DataCadastro = DateTime.Parse(reader["DataCadastro"].ToString())
                };
                listaDossie.Add(TemObjeto);
            }
            reader.Close();
            return listaDossie;
        }
        private List<Dossie> TransformaReaderEmListaDeObjeto2(SqlDataReader reader)
        {

            var listaDossie = new List<Dossie>();
            while (reader.Read())
            {
                var TemObjeto = new Dossie()
                {
                    //Id = reader["Id"]!= DBNull.Value ? int.Parse(reader["Id"].ToString()):0,
                    TipoDocumento = reader["TipoDocumento"].ToString()
                };
                listaDossie.Add(TemObjeto);
            }
            reader.Close();
            return listaDossie;
        }
    }
}
